#include <iostream>
#include <unistd.h>
#include <signal.h>

using namespace std;

void PrintPending(sigset_t &pending)
{
    for (int signo = 31; signo >= 1; signo--)
    {
        if (sigismember(&pending, signo))
        {
            cout << "1";
        }
        else
        {
            cout << "0";
        }
    }
    cout << "\n\n";
}

int main()
{
    sigset_t bset, oset; // 创建两个信号集，一个用于更改，一个用于备份
    // 清0
    sigemptyset(&bset);
    sigemptyset(&oset);

    sigaddset(&bset, 2); // 设置2号信号进入bset信号集
    // 将bset信号集设置进当前进程的block表中
    sigprocmask(SIG_SETMASK, &bset, &oset);//此时的block表：0000 ... 0100

    // 打印pending表
    int cnt = 0;
    sigset_t pending;
    while (true)
    {
        int n = sigpending(&pending);//将pending表的内容写进变量pending中
        if (n < 0)
            continue;
        PrintPending(pending);
        sleep(1);
        //发送信号
        cnt++;
         if(cnt == 10)
        {
            cout << "unblock 2 signo" << endl;
            sigprocmask(SIG_SETMASK, &oset, nullptr); // 我们已经把2好信号屏蔽了吗？ok
        }
    }

   

    return 0;
}